PROJECT	= main.gba

PREFIX	= arm-elf-

AS	= $(PREFIX)as
CC	= $(PREFIX)gcc
LD	= $(PREFIX)ld
OBJCOPY	= $(PREFIX)objcopy
RM	= rm -f
GBAFIX	= gbafix -v


ASFLAGS	= -mthumb-interwork
CFLAGS	= -Wall -mthumb-interwork -c -O3 -ffreestanding -mlong-calls 
LDFLAGS	= -marm -mthumb-interwork -Wl

###############
#PROJECT FILES#
###############

CFILES	= $(foreach dir,.,$(notdir $(wildcard $(dir)/*.c)))
SFILES	= $(foreach dir,.,$(notdir $(wildcard $(dir)/*.s)))
OFILES	= $(SFILES:.s=.o) $(CFILES:.c=.o)
LIBS	= bin/binaries.lib lib/lglib.lib 

#######
#RULES#
#######

.PHONY:	clean

all:
	@echo [BINARIES]
	@make --no-print-directory -C bin
	@echo [LIB]
	@make --no-print-directory -C lib
	@echo [CODE]
	@make --no-print-directory $(PROJECT)
	
$(PROJECT) : $(PROJECT).elf
	@echo built!
	@$(OBJCOPY) -O binary $< $@
	@$(GBAFIX) $@

$(PROJECT).elf : Makefile $(OFILES)
	@echo linking...
	@$(CC) $(LDFLAGS) -specs=gba.specs -o $@ $(OFILES) $(LIBS)

%.o : %.c
	@echo $(notdir $<)
	@$(CC) $(CFLAGS) $< -o $@

%.o : %.s
	@echo $(notdir $<)
	@$(AS) $(ASFLAGS) $< -o $@

clean :
	@echo cleaning...
	@$(RM) *.o *.elf *.map
	
cleanall :
	@echo [BINARIES]
	@make clean --no-print-directory -C bin
	@echo [LIB]
	@make clean --no-print-directory -C lib
	@echo [CODE]
	@make clean --no-print-directory -C .
